home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / tool / genji / src / subobj.c < prev   
Text File  |  1995-08-13  |  6KB  |  353 lines

  1. #include"genji.h"
  2.  
  3. void    incNest( int i )
  4. {
  5.     nest[np+1] = i;
  6.     info[np+1][0] = info[np][0];
  7.     info[np+1][1] = info[np][1];
  8.     ++ np;
  9.  
  10.     return;
  11. }
  12.  
  13. int        setInit( char *cnfname )
  14. {
  15.     FILE    *fp;
  16.     int        i;
  17.     double    d;
  18.     char    fntname[64];
  19.     char    buf[256],buf2[256];
  20.  
  21.     if( ( fp = fopen( cnfname, "r" ) ) == NULL )
  22.         return ERR;
  23.  
  24.     xfgets( fntname, fp );
  25.     if( ( mint_fp = fopen( fntname, "rb" ) ) == NULL )
  26.     {
  27.         mint_flg = OFF;
  28.         VC_printf( "明朝体48ドットフォントを使用しません。\n" );
  29.     }
  30.     else
  31.     {
  32.         mint_flg = ON;
  33.         VC_printf( "'%s'を明朝体48ドットフォントとして使用します。\n", POINTER, fntname );
  34.     }
  35.  
  36.     xfgets( fntname, fp );
  37.     if( ( goth_fp = fopen( fntname, "rb" ) ) == NULL )
  38.     {
  39.         goth_flg = OFF;
  40.         VC_printf( "ゴシック体48ドットフォントを使用しません。\n" );
  41.     }
  42.     else
  43.     {
  44.         goth_flg = ON;
  45.         VC_printf( "'%s'をゴシック体48ドットフォントとして使用します。\n", POINTER, fntname );
  46.     }
  47.  
  48.     xfgets( fntname, fp );
  49.     if( ( mouh_fp = fopen( fntname, "rb" ) ) == NULL )
  50.     {
  51.         mouh_flg = OFF;
  52.         VC_printf( "毛筆体48ドットフォントを使用しません。\n" );
  53.     }
  54.     else
  55.     {
  56.         mouh_flg = ON;
  57.         VC_printf( "'%s'を毛筆体48ドットフォントとして使用します。\n", POINTER, fntname );
  58.     }
  59.  
  60.     xfgets( fntname, fp );
  61.     if( ( maru_fp = fopen( fntname, "rb" ) ) == NULL )
  62.     {
  63.         maru_flg = OFF;
  64.         VC_printf( "丸文字24ドットフォントを使用しません。\n" );
  65.     }
  66.     else
  67.     {
  68.         maru_flg = ON;
  69.         VC_printf( "'%s'を丸文字24ドットフォントとして使用します。\n", POINTER, fntname );
  70.     }
  71.  
  72.     xfgets( fntname, fp );
  73.     if( ( kyou_fp = fopen( fntname, "rb" ) ) == NULL )
  74.     {
  75.         kyou_flg = OFF;
  76.         VC_printf( "教科書体24ドットフォントを使用しません。\n" );
  77.     }
  78.     else
  79.     {
  80.         kyou_flg = ON;
  81.         VC_printf( "'%s'を教科書体24ドットフォントとして使用します。\n", POINTER, fntname );
  82.     }
  83.  
  84.     fscanf( fp, "%d", &i );
  85.     if( i == 0 )
  86.         writepage = OFF;
  87.     else
  88.         writepage = ON;
  89.  
  90.     fscanf( fp, "%d", &i );
  91.     if( i > 0 )
  92.         lpp = i;
  93.     else
  94.         lpp = 0;
  95.  
  96.     fscanf( fp, "%d", &i );
  97.     if( i<0 || i>80 )
  98.         VC_printf( "レフトマージンの設定が間違ってます。\n" );
  99.     else
  100.         leftmargin = i;
  101.  
  102.     fscanf( fp, "%d", &i );
  103.     if( i<1 || i>8 )
  104.         VC_printf( "タブサイズの設定が間違ってます。\n" );
  105.     else
  106.         tabsize = i;
  107.  
  108.     fclose( fp );
  109.     return;
  110. }
  111.  
  112. void    convert24to48( char *gj24, char *gj48 )
  113. {
  114.     int        i,j;
  115.  
  116.     for( i=0; i<72; i++ )
  117.     {
  118.         *gj48 = 0;
  119.         *gj48 |= ( (gj24[i]&128) | ((gj24[i]&128)>>1) );
  120.         *gj48 |= ( ((gj24[i]&64)>>1) | ((gj24[i]&64)>>2) );
  121.         *gj48 |= ( ((gj24[i]&32)>>2) | ((gj24[i]&32)>>3) );
  122.         *gj48 |= ( ((gj24[i]&16)>>3) | ((gj24[i]&16)>>4) );
  123.         ++gj48;
  124.         *gj48 = 0;
  125.         *gj48 |= ( ((gj24[i]&8)<<4) | ((gj24[i]&8)<<3) );
  126.         *gj48 |= ( ((gj24[i]&4)<<3) | ((gj24[i]&4)<<2) );
  127.         *gj48 |= ( ((gj24[i]&2)<<2) | ((gj24[i]&2)<<1) );
  128.         *gj48 |= ( ((gj24[i]&1)<<1) | (gj24[i]&1) );
  129.         ++gj48;
  130.         if( (i+1)%3 == 0 )
  131.         {
  132.             for( j=0; j<6; j++ )
  133.                 *gj48++ = *(gj48-6);
  134.         }
  135.     }
  136.     return;
  137. }
  138.  
  139. void    num2str( int *st, int number, int length )
  140. {
  141.     int        d = 1;
  142.     int        i;
  143.  
  144.     for( i=0; i<length; i++ )
  145.     {
  146.         st[length-i-1] = ( number % (d*10) ) / d;
  147.         d *= 10;
  148.     }
  149.  
  150.     return;
  151. }
  152.  
  153. int        getOneSegment( const char *p, char *q )
  154. {
  155.     char    *t;
  156.     if( *p++ != '(' )
  157.         return ERR;
  158.  
  159.     strncpy( q, p, 64 );
  160.     t = memchr( q, ')', 64 );
  161.     if( t == NULL )
  162.         return ERR;
  163.     *t = 0;
  164.     return NOERR;
  165. }
  166.  
  167. int        xfgets( char *fn, FILE *fp )
  168. {
  169.     if( fgets( fn, 256, fp ) == NULL )
  170.         return ERR;
  171.  
  172.     while( *fn != '\n' && *fn != 0 )
  173.         ++ fn;
  174.  
  175.     *fn = 0;
  176.  
  177.     return NOERR;
  178. }
  179.  
  180. int        addstrings( const char *s, char *t )
  181. {
  182.     int        i = 0;
  183.  
  184.     while( *s )
  185.     {
  186.         *t++ = *s++;
  187.         i++;
  188.     }
  189.     *t = 0;
  190.     return i;
  191. }
  192.  
  193. int        cmpstrings( const char *s, const char *t )
  194. {
  195.     size_t    l;
  196.  
  197.     l = strlen( t );
  198.     if( strncmp( s, t, l ) )
  199.         return 0;
  200.     else
  201.         return 1;
  202. }
  203.  
  204. int        printStrings( int n, char *p )
  205. {
  206.     int        i,e;
  207.  
  208.     if( n )
  209.     {
  210.         for( i=0; i<n; i++ )
  211.         {
  212.             if( e = PRN_putc( *(p+i) ) )
  213.                 return e;
  214.         }
  215.     }
  216.     else
  217.     {
  218.         while( *p )
  219.         {
  220.             if( e = PRN_putc( *p ) )
  221.                 return e;
  222.             ++ p;
  223.         }
  224.     }
  225.     return 0;
  226. }
  227.  
  228. typedef struct
  229. {
  230.     char    *command;
  231.     int        flag;    /* 引き数フラグ flag & 1  ネストフラグ flag & 0x10 */
  232.     int        ret;
  233. } COMM ;
  234.  
  235. COMM    comdata[]={ { "h1byte", 0, 1 },
  236.                     { "up", 16, 2 },
  237.                     { "down", 16, 4 },
  238.                     { "kanjipitch", 1, 6 },
  239.                     { "retpitch", 1, 8 },
  240.                     { "normal", 16, 10 },
  241.                     { "wide", 16, 11 },
  242.                     { "tall", 16, 12 },
  243.                     { "large", 16, 13 },
  244.                     { "halftall", 16, 14 },
  245.                     { "halfwide", 16, 15 },
  246.                     { "h_t_wide", 16, 16 },
  247.                     { "h_w_tall", 16, 17 },
  248.                     { "small", 16, 18 },
  249.                     { "gothic", 16, 19 },
  250.                     { "mintyo", 16, 20 },
  251.                     { "underline", 16, 21 },
  252.                     { "connect_on", 0, 27 },
  253.                     { "connect_off", 0, 28 },
  254.                     { "set_top", 0, 29 },
  255.                     { "set_bottom", 0, 30 },
  256.                     { "set_center", 0, 31 },
  257.                     { "proportion", 16, 32 },
  258.                     { "next", 0, 38 },
  259.                     { "leftmargin", 1, 39 },
  260.                     { "net", 17, 40 },
  261.                     { "v_write", 0, 41 },
  262.                     { "h_write", 0, 42 },
  263.                     { "mouhitu", 16, 43 },
  264.                     { "maru", 16, 44 },
  265.                     { "kyou", 16, 45 },
  266.                     { "jis", 1, 46 },
  267.                     { "col_rev", 16, 47 },
  268.                     { "tabsize", 1, 48 },
  269.                     { NULL, 0, 0 } };
  270.  
  271. int        getCommand2()
  272. {
  273.     int        i,j;
  274.     char    buf[256];
  275.     double    w;
  276.  
  277.     i = 0;
  278.     while( comdata[i].command != NULL )
  279.     {
  280.         if( cmpstrings( file, comdata[i].command ) )
  281.         {
  282.             file += strlen( comdata[i].command );
  283.             if( comdata[i].flag & 1 )
  284.             {
  285.                 pool[1] = 1;
  286.                 while(1)
  287.                 {
  288.                     if( getOneSegment( file, buf ) )
  289.                     {
  290.                         pool[1] = 0;
  291.                         break;
  292.                     }
  293.                     if( calcvalue( buf, &w ) )
  294.                     {
  295.                         pool[1] = 0;
  296.                         break;
  297.                     }
  298.                     j = w;
  299.                     DWORD( pool+2 ) = j;
  300.                     file += ( strlen( buf ) + 2 );
  301.                     break;
  302.                 }
  303.             }
  304.             if( comdata[i].flag & 16 )
  305.             {
  306.                 if( *file == '{' )
  307.                 {
  308.                     pool[0] = 1;
  309.                     ++ file;
  310.                 }
  311.                 else
  312.                     pool[0] = 0;
  313.             }
  314.             return comdata[i].ret;
  315.         }
  316.         ++ i;
  317.     }
  318.  
  319.     return 0xffff;
  320. }
  321.  
  322. int        printReady( int e )
  323. {
  324.     int        ch,ec;
  325.  
  326.     if( e > 6 )
  327.         e = 7;
  328.  
  329.     VC_printf( "%s\n準備が出来たら何かキーを押してください。(<a> abort)\n", POINTER, errmes[e] );
  330.     KYB_clrbuf();
  331.     ch = KYB_read( 0, &ec );
  332.     if( ch == 'a' || ch == 'A' )
  333.         return 1;
  334.  
  335.     return 0;
  336. }
  337.  
  338. void    end_()
  339. {
  340.     if( mint_flg == ON )
  341.         fclose( mint_fp );
  342.     if( goth_flg == ON )
  343.         fclose( goth_fp );
  344.     if( mouh_flg == ON )
  345.         fclose( mouh_fp );
  346.     if( maru_flg == ON )
  347.         fclose( maru_fp );
  348.     if( kyou_flg == ON )
  349.         fclose( kyou_fp );
  350.  
  351.     return;
  352. }
  353.